﻿/*/////////////////////////////////////////////////////////////////////////////////////////////////////////
/ 
/   Một số thông điệp phát sinh khi thay đổi cài đặt:
/
/   reload-setting-data: Phát sinh thay đổi cài đặt
/   require-accept-site: Nhận yêu cầu accept một trang
/   require-except-site: Nhận yêu cầu except một trang
/
/////////////////////////////////////////////////////////////////////////////////////////////////////////*/

//---------------------------------------setting-data------------------------------------------------------

var settingData = {};
settingData.isExceptedAllSites = "";
// Các biến này dùng trong trường hợp người dùng accept all site, 
// họ vẫn có thể disable một số trang
settingData.countExceptedSites = 0;
settingData.exceptedSites = [];

// Các biến này dùng trong trường hợp người dùng đã except all site, 
// họ vẫn có thể enable một số trang
settingData.countAcceptedSites = 0;
settingData.acceptedSites = [];

//---------------------------------------xử lý cài đặt trang---------------------------------------------

settingData.isExceptedAllSites = localStorage["isExceptedAllSites"] == null ? 0 : parseInt(localStorage["isExceptedAllSites"]);
if (settingData.isExceptedAllSites == 0) {
    $(function () {
        $("#checkbox_switcher").switcher({
            switcher_on_Off: false,
            on_label: "Turn On Preview",
            off_label: "Turn Off Preview"
        });
    });
} else {
    $(function () {
        $("#checkbox_switcher").switcher({
            switcher_on_Off: true,
            on_label: "Turn On Preview",
            off_label: "Turn Off Preview"
        });
    });
}

settingData.countExceptedSites = localStorage["countExceptedSites"] == null ? 0 : parseInt(localStorage["countExceptedSites"]);
for (var i = 0 ; i < settingData.countExceptedSites; i++)
    settingData.exceptedSites[i] = localStorage["e" + i];

settingData.countAcceptedSites = localStorage["countAcceptedSites"] == null ? 0 : parseInt(localStorage["countAcceptedSites"]);
for (var i = 0 ; i < settingData.countAcceptedSites; i++)
    settingData.acceptedSites[i] = localStorage["a" + i];
addon.port.emit("reload-setting-data", settingData);

save = function () {
    // Làm rỗng vùng nhớ trước khi lưu setting
    localStorage.clear();

    localStorage["isExceptedAllSites"] = settingData.isExceptedAllSites;

    settingData.countExceptedSites = settingData.exceptSites == [] ? 0 : settingData.exceptedSites.length;
    localStorage["countExceptedSites"] = settingData.countExceptedSites;
    for (var i = 0 ; i < settingData.countExceptedSites; i++)
        localStorage["e" + i] = settingData.exceptedSites[i];

    settingData.countAcceptedSites = settingData.acceptedSites == [] ? 0 : settingData.acceptedSites.length;
    localStorage["countAcceptedSites"] = settingData.countAcceptedSites;
    for (var i = 0 ; i < settingData.countAcceptedSites; i++)
        localStorage["a" + i] = settingData.acceptedSites[i];
    addon.port.emit("reload-setting-data", settingData);
}

exceptSite = function (site) {
    // Nếu chế độ loại trừ tất cả trang bật 
    // thì cần kiểm tra danh sách trang chấp nhận có tồn tại trang này hay không
    // Nếu có thì xóa nó và gửi sự kiện reload-setting-data ra bên ngoài
    if (settingData.isExceptedAllSites == 1) {
        for (var i = 0; i < settingData.acceptedSites.length; i++) {
            if (settingData.acceptedSites[i] == site) {
                delete settingData.acceptedSites[i];
                break;
            }
        }
    }
        //Nếu bật chức năng chấp nhận tất cả thì cần phải thêm trang đó vào danh sách loại trừ
    else {
        var isExisted = false;
        for (var i = 0 ; i < settingData.exceptedSites.length; i++)
            if (settingData.exceptedSites[i] == site) {
                isExisted = true;
                break;
            }
        if (isExisted == false) {
            settingData.exceptedSites.push(site);
        }
    }
    save();
}

acceptSite = function (site) {
    // Nếu chế độ chấp nhận tất cả trang
    // thì cần kiểm tra danh sách trang loại trừ có tồn tại trang này hay không
    if (settingData.isExceptedAllSites == 0) {
        for (var i = 0; i < settingData.exceptedSites.length; i++) {
            if (settingData.exceptedSites[i] == site) {
                delete settingData.exceptedSites[i];
                break;
            }
        }
    }
        //Nếu bật chức năng loại trừ tất cả thì cần phải thêm trang đó vào danh sách chấp nhận
    else {
        var isExisted = false;
        for (var i = 0 ; i < settingData.acceptedSites.length; i++)
            if (settingData.acceptedSites[i] == site) {
                isExisted = true;
                break;
            }
        if (isExisted == false) {
            settingData.acceptedSites.push(site);
        }
    }
    save();
}

acceptAllSite = function () {
    settingData.isExceptedAllSites = 0;
    settingData.countAcceptedSites = 0;
    settingData.acceptedSites = [];
    settingData.countExceptedSites = 0;
    settingData.exceptedSites = [];
    save();
}

exceptAllSite = function () {
    settingData.isExceptedAllSites = 1;
    settingData.countAcceptedSites = 0;
    settingData.acceptedSites = [];
    settingData.countExceptedSites = 0;
    settingData.exceptedSites = [];
    save();
}

//---------------------------------------thông điệp cài đặt---------------------------------------------

addon.port.on("require-accept-site", function (site) {
    acceptSite(site);
});

addon.port.on("require-except-site", function (site) {
    exceptSite(site);
});

//---------------------------------------switcher-action--------------------------------------------------

(function ($) {
    $.fn.switcher = function (options) {

        var settings = $.extend({
            switcher_on_Off: true,
            on_label: "ON",
            off_label: "OFF"
        }, options);

        var input_name = $(this).attr("name");

        var template = "<div class='checkbox_switcher' id=" + $(this).attr("id") + ">\
			<div class='inline_container";
        if (settings.switcher_on_Off)
            template += " on";
        template += "'>\
				<div class='label on_option'>"+ settings.on_label + "</div>\
				<div class='middle_space'></div>\
				<div class='label off_option'>"+ settings.off_label + "</div>\
			</div>\
			<input type='hidden' value='";
        if (settings.switcher_on_Off) {
            template += "0";
        } else {
            template += "1";
        }
        template += "' name='" + input_name + "'>\
		</div>";
        $(template).replaceAll(this);
        var labels_cont = $(".checkbox_switcher");
        var maxwidth = getMaxChildWidth(labels_cont);
        labels_cont.innerWidth(maxwidth + 28)
			.find(".inline_container").innerWidth(maxwidth * 2 + 30)
			.find(".label").innerWidth(maxwidth);

        var animateWidth = labels_cont.find(".label").innerWidth() + 2;

        if (!settings.switcher_on_Off) {
            labels_cont.find(".inline_container").css({ 'margin-left': -animateWidth, 'background-color': '#de4040' });
        } else {
            labels_cont.find(".inline_container").css({ 'margin-left': -animateWidth, 'background-color': '#02b502' });
        }

        labels_cont.find(".inline_container").bind("click", function () {

            if ($(this).hasClass("on")) {
                $(this).animate({
                    'margin-left': -animateWidth
                }, 500, function () {
                    $(this).removeClass("on");
                    $("input[name=" + input_name + "]").val(1);
                });
                labels_cont.find(".inline_container").css({ 'background-color': '#de4040' });
                acceptAllSite();
            } else {
                $(this).animate({
                    'margin-left': 0
                }, 500, function () {
                    $(this).addClass("on");
                    $("input[name=" + input_name + "]").val(0);
                });
                labels_cont.find(".inline_container").css({ 'background-color': '#02b502' });
                exceptAllSite();
            }
        });
    };

})(jQuery);

function getMaxChildWidth(sel) {
    max = 0;
    $(sel).find(".label").each(function () {
        c_width = parseInt($(this).innerWidth());
        if (c_width > max) {
            max = c_width;
        }
    });
    return max;
}

//---------------------------------------about-icon-click--------------------------------------------------

function navigateToSupportPage() {
    addon.port.emit("navigateToSupportPage");
}
